// pages/afflatus/main/index.js
const app = getApp()
const utils = require('./../../../utils/util.js')
const dataHandler = require('../../Featured/main/dataHandler.js')
const menuData =  {
  styleTitle: "风格",
  styleValue: null,
  styleMenuItemId: 'all-style',
  spaceTitle:'空间',
  spaceValue: null,
  spaceMenuItemId: 'all-space',
  familyNumbersTitle: '家庭',
  familyNumbersValue: null,
  familyNumbersMenuItemId:'all-familyNumbers',
  livingRoomTitle: "居室",
  livingRoomValue: null,
  livingRoomMenuItemId: 'all-livingRoom',
}

Page({

  /**
   * 页面的初始数据
   */
  data: {
    bool:false,
    navHeight: app.globalData.navHeight,
    statusBarHeight: wx.getSystemInfoSync().statusBarHeight,
    isIphoneX: wx.getSystemInfoSync().safeArea.top > 20 && wx.getSystemInfoSync().model.indexOf('iPhone') > -1 ? true : false,
    // 热门图片
    GridData:[],
    //地址
    position:{},
    // 我的户型及装修攻略
    HouseAndStrategyData:[
      {
        url:'/static/img/myselect.png',
        name:'精选专题',
        id:1,
        title:'寻找专属梦想家'
      },
      {
        url:'/static/img/mydecorate.png',
        name:'装修攻略',
        id:2,
        title:'装修攻略介绍出'
      },
    ],
    //条件
    conditionList:[{
        name:'最新',
        value:'1'
      },
      {
        name:'按点赞数',
        value:'2'
      },
      {
        name:'按浏览量',
        value:'3'
      },
    ],
    //当前条件
    active: 0, //按钮内容
    page: 1, // 本地案例页数
    localCaseList:[], // 本地案例
    allHouseData: {},  // 风格 居室 家庭组成等数据集合
    menuData: menuData, // 风格 居室 家庭组成等配置
    isRefresh: false, // 是否刷新数据
    hasNoMore: false, // 是否有数据
    provinceList:[], // 省列表
    cityList:[],     // 市列表
    countyList:[],   // 区列表
    multiArray: [],
    multiIndex: [0, 0, 0],
    provinceId: "", //默认省份id
    cityId: "", //默认城市id
    positionFlag: 0, // 选择省市区标识
    latitude:'',
    longitude:'',
    topMyTypeImageUrl:"",//顶部我的户型入口图片
    isFixedTop: false, // 是否固定在顶部
    isAuthorize: false,
  },
  // 获取省列表
  getProvinces() {
    utils.$http(app.globalData.api.getProvinces, {}, 'GET', true, 'JSON').then(res => {
     if(res.success === 1) {
       if(Array.isArray(res.data)) {
        res.data.forEach(item => {item.text = item.name})
        this.setData({
          provinceList: res.data
        })
        this.getCities(res.data[0].code)
       }
     } 
    })
  },
  // 获取市列表
  getCities(parentCode) {
    utils.$http(app.globalData.api.getCities, { parentCode }, 'GET', true, 'JSON').then(res => {
     if(res.success === 1) {
       if(Array.isArray(res.data)) {
        res.data.forEach(item => {item.text = item.name})
        this.setData({
          cityList: res.data
        })

        this.getCounties(res.data[0].code)
       }
     } 
    })
  },
  // 获取区列表
  getCounties(parentCode) {
    utils.$http(app.globalData.api.getCounties, { parentCode }, 'GET', true, 'JSON').then(res => {
     if(res.success === 1) {
       if(Array.isArray(res.data)) {
        res.data.forEach(item => {item.text = item.name})
        this.setData({
          countyList: res.data,
          multiArray: [this.data.provinceList,this.data.cityList, res.data],
        })
       }
     } 
    })
  },
  // 进入我的户型页面
  goMyType(){
     wx.navigateTo({
          url: '/pages/housetype/mine/index',
        })
  },
  bindPickerChange(e) {
    // console.log( e.detail);
    const countyIndex = e.detail.value[2]
    const { latitude = '', longitude = '' } =  this.data.countyList && this.data.countyList[countyIndex]
    
    this.setData({
      positionFlag: 1,
      latitude,
      longitude,
    })
    

    this.data.page = 1
    this.getLocalCaseList(1)
  },
  // 绑定选择器滑动事件
  bindMultiPickerColumnChange(e) {
    let that = this;
    // console.log('修改的列为', e.detail.column, '，值为', e.detail.value);
    let data = {
      multiArray: that.data.multiArray,
      multiIndex: that.data.multiIndex
    };
 
    data.multiIndex[e.detail.column] = e.detail.value;
    //data.multiIndex[0] : 第一列选择第几个
    //data.multiIndex[1] : 第二列选择第几个
    // console.log("multiIndex0:" + data.multiIndex[0], this.data.provinceList[data.multiIndex[0]])
    // console.log("multiIndex1:" + data.multiIndex[1], this.data.cityList[data.multiIndex[1]])
 
    let provinceId = this.data.provinceList[data.multiIndex[0]].code; //获取选择到的省份id
    let cityId = this.data.cityList[data.multiIndex[1]].code; //获取选择到的市区id

    let obj = {
      provinceId: provinceId, //第一列父元素ID
      cityId: cityId, //第二列父元素ID
      that: that,
      column: e.detail.column,
      valueIndex: e.detail.value
    }
    this.changePicker(obj)
  },
  //改变多列选择
 changePicker(obj) {
  let provinceId = obj.provinceId;
  let cityId = obj.cityId;
  let column = obj.column;
  let valueIndex = obj.valueIndex;
 
  let that = obj.that;
  let newArray1 = [], newArray2 = [];
  // console.log('provinceId:' + provinceId);

  let province_index = 0;
  //遍历省
  this.data.provinceList.map(function(value, index) {
    if (value.code == provinceId) {
      province_index = index;
 
      //请求市信息
      utils.$http(app.globalData.api.getCities, { parentCode: provinceId}, 'GET', true, 'JSON').then(res => {
        if(res.success === 1) {
          if(Array.isArray(res.data)) {
            that.setData({
             cityList: res.data
           })
            let dataArray = res.data
            newArray1 = dataArray;
            let city_index = 0;
            let countryId = newArray1[0].code;;
            newArray1.map(function(v2, i2) {
              if (v2.code == cityId) {
                city_index = i2;
                countryId = v2.code
              }
            })
            if (column == 2) {
              let selectId = that.data.countyList[valueIndex].code
              //不请求区县信息
              that.setData({
                multiIndex: [province_index, city_index, valueIndex],
                countryId: selectId
              })
            } else {
              //加载区县列表
              utils.$http(app.globalData.api.getCounties, { parentCode : countryId }, 'GET', true, 'JSON').then(resCounty => {
                if(resCounty.success === 1) {
                  if(Array.isArray(resCounty.data)) {
                    let dataArray2 = resCounty.data
                    newArray2 = dataArray2;
    
                    // 判断如果为空的情况下
                    if (newArray1.length == 0) {
                      newArray1.push({
                        id: '-1',
                        name: '-',
                      })
                    }
                    if (newArray2.length == 0) {
                      newArray2.push({
                        id: '-1',
                        name: '-',
                      })
                    }
                    let selectId = newArray2[0].code
                    that.data.cityList = newArray1;
                    that.data.countyList = newArray2;
    
                    that.setData({
                      multiArray: [that.data.provinceList, that.data.cityList, dataArray2],
                      multiIndex: [province_index, city_index, 0],
                      cityId: countryId,
                      countryId: selectId
                    })
                  }
                } 
               })
            }
          }
        } 
       })
    }
  }) 
},
  //获取热门主题
  GetAfflatusHotSpecial(){
    utils.$http(app.globalData.api.GetAfflatusHotSpecial, {}, 'GET', true, 'JSON').then(res => {
     if(res.data) {
       this.setData({
        GridData: res.data
       })
     }
    })
  },
  //获取本地案例风格
  GetAfflatusCondition(){
    utils.$http(app.globalData.api.GetAfflatusCondition, {}, 'GET', true, 'JSON').then(res => {
      if (res.data) {
        const SortData = JSON.parse(JSON.stringify(res.data))
        const allHouseData = dataHandler.handleAllHouseMenuListData(SortData)
        this.setData({
          allHouseData: allHouseData
        })
      }
    })
  },
  //筛选查询本地案例
  getLocalCaseList(page, type="new") {
    const params = this.getAllProgramParams()
    params.page = page
    // console.log('page:', params)
    utils.$http(app.globalData.api.GetAfflatusLocalProgramme,params, 'POST', false, "JSON").then((res) => {
      if(res.success === 1 && res.data ) {
        if (type === 'new') {
          wx.stopPullDownRefresh()
          
          this.setData({
            isRefresh: false,
            localCaseList: res.data.records,
            hasNoMore: false
          })
        } else {
          if(res.data && res.data.records && res.data.records.length === 0){
              this.setData({
                hasNoMore:true
              })
          } else {
            const list = this.data.localCaseList.concat(res.data.records)
            this.setData({
              localCaseList: list
            })
          }
        }
      }
    }).catch (() => {
      this.setData({
        isRefresh: false
      })
    })
  },

  // 请求参数转换
  getAllProgramParams() {
    const { menuData } = this.data

    const styleId = menuData.styleValue || ''
    const spaceCode = menuData.spaceValue || ''
    const familyNumber = menuData.familyNumbersValue || ''
    const livingRoom = menuData.livingRoomValue || ''

    // const latitude = wx.getStorageSync('latitude') || ''
    // const longitude = wx.getStorageSync('longitude') || ''
    const latitude = this.data.latitude || ''
    const longitude = this.data.longitude || ''

    const params = {
      latitude,
      longitude,
      familyNumber: familyNumber, // 家庭组成
      livingRoom: livingRoom, // 居室
      spaceCode: spaceCode, // 空间
      styleId: styleId, // 风格
      orderType: this.data.active + 1,
      rows: 10, // 每页获取的数据量
      pageFlag: true,
      // totalFlag: true
    }
    return params
  },
  //改变当前条件 最新 按点赞量 按浏览量
  setActive(e){
    let active = e.target.dataset.active
    this.setData({
      active,
    })
    this.data.page = 1
    this.getLocalCaseList(1)
  },
  //根据经纬度解析地址
  Getlocationname(latitude,longitude){
    utils.$http(app.globalData.api.Getlocationname, {
      latitude,
      longitude
    }, '', true, 'JSON').then(res => {
      if(res.data){
        let data = JSON.parse(JSON.stringify(res.data))
        wx.setStorageSync('city',data.city)
        wx.setStorageSync('county',data.district)
        wx.setStorageSync('province',data.province)
        this.setData({
          position:data
        })
      }
    })
  },
  // 灵感发现页
  gotoFind(){
    wx.navigateTo({
      url: '../afflatusPage/Find/index',
    })
  },

   // 全部方案 风格 空间 品类 居室 全部是 单选
  menuItemChange(e) {
    const optType = e.detail.optType
    const subIndex = e.detail.subIndex
    const data = e.detail.data
    this.selectComponent(e.detail.superId).toggle(); // 选中后关闭遮罩层

    const menu = this.data.menuData

    if(subIndex === 0){
      menu.styleTitle = data.text
      menu.styleValue = data.value
    }
    if (subIndex === 1) {
      menu.spaceTitle = data.text
      menu.spaceValue = data.value
    }
    if (subIndex === 2) {
      menu.familyNumbersTitle = data.text
      menu.familyNumbersValue = data.value
    }
    if (subIndex === 3) {
      menu.livingRoomTitle = data.text
      menu.livingRoomValue = data.value
    }
    this.setData({
      menuData: menu
    })
    this.data.page = 1
    this.getLocalCaseList(1)
  },

  setupInit:function(){
    // console.log(this.data.navHeight)
    utils.getFrameById('#navigationBar', (frame) => {
      // console.log('frame:', frame)
      if (frame && frame.height) {
        this.setData({
          navHeight: frame.height
        })
        // console.log('frame:', frame)
      }
    })
  },
  // 判断是否固定到顶部
  onPageScroll:function(e){ // 获取滚动条当前位置
    // console.log(e.scrollTop)
    const isSatisfy = e.scrollTop >= 280 && this.data.localCaseList.length > 2  // localCaseList 数组长度小于等于2时高度不够，不固定
    if(this.data.isFixedTop == isSatisfy) { 
      return false;
    } else {
      this.setData({
        isFixedTop: isSatisfy
      })
    }
  },
  //获取顶部我的户型入口图片
  handleGetTopModelImageUrl(){
    utils.$http(app.globalData.api.getRealNetworkStaticResources, {}, 'GET', false, 'JSON').then(res => {
      if(res.success){
        this.setData({
          topMyTypeImageUrl:res.data.filter(item=>item.pageName==="MY_HOUSE_TYPE")[0].bannerImg
        })
      }
    })
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    this.setupInit()

    if (typeof this.getTabBar === 'function' &&
      this.getTabBar()) {
      this.getTabBar().setData({
        selected: 3
      })
    }
    this.handleGetTopModelImageUrl()
    this.getProvinces() // 获取省列表
    this.GetAfflatusHotSpecial()
    this.GetAfflatusCondition()
    this.initlocation()
  },
    /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  loadNewData: function () {
    this.setData({
      isRefresh :true
    })

    this.data.page = 1
    this.getLocalCaseList(1)
  },

  /**
   * 页面上拉触底事件的处理函数
   */
  loadMoreData:function () {
     // 空间设计
    this.data.page = this.data.page + 1
    this.getLocalCaseList(this.data.page, 'more')
  },
  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {
 
  //   let _this = this
  
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {

  },
  initlocation() {
    let _this = this
    wx.getSetting({
      success(res) {
        if (!res.authSetting['scope.userLocation']) {
          wx.authorize({
            scope: 'scope.userLocation',
            success () {
              wx.getLocation({
                type: 'wgs84',
                success (res) {
                  _this.setData({
                    latitude :res.latitude,
                    longitude :res.longitude,
                    isAuthorize: true
                  })

                  const latitude = res.latitude
                  const longitude = res.longitude
                  wx.setStorageSync('latitude', latitude)
                  wx.setStorageSync('longitude', longitude)

                  _this.Getlocationname(latitude,longitude)
                  _this.getLocalCaseList(1)
                }
              })
            },
            fail(error) {
               _this.setData({
              latitude : '',
              longitude : '',
              positionFlag: 0
            })
            // 授权失败
            _this.getLocalCaseList(1)
          }
        })
      } else {
        wx.getLocation({
          type: 'wgs84',
          success (res) {
            _this.setData({
              latitude :res.latitude,
              longitude :res.longitude,
              positionFlag: 0,
              isAuthorize: true
            })

            const latitude = res.latitude
            const longitude = res.longitude
            wx.setStorageSync('latitude', latitude)
            wx.setStorageSync('longitude', longitude)

            _this.Getlocationname(latitude,longitude)
            _this.getLocalCaseList(1)
          }
        })
      }
    },
    fail(err) {
      console.log(err)
    }
    })
  },
  // 刷新页面时 需判断是否允许定位，不允许的话 需重新定位 
  uploadlocation() {
    let _this = this

    if(!_this.data.isAuthorize) {
      wx.showModal({
        content: '检测到您没有打开定位，是否去设置打开',
        confirmText: '确认',
        cancelText: '取消',
        success: function(res) {
          if(res.confirm) {
            // 重新授权
            wx.openSetting({
              success: (res) => {
                _this.setData({
                  isAuthorize: res.authSetting['scope.userLocation']
                })
                if (res.authSetting['scope.userLocation']) {
                  wx.getLocation({
                    type: 'wgs84',
                    success (res) {
                      _this.setData({
                        latitude :res.latitude,
                        longitude :res.longitude,
                        positionFlag: 0
                      })
              
                      const latitude = res.latitude
                      const longitude = res.longitude
                      wx.setStorageSync('latitude', latitude)
                      wx.setStorageSync('longitude', longitude)
              
                      _this.Getlocationname(latitude,longitude)
                      _this.getLocalCaseList(1)
                    }
                  })
                } else {
                  _this.setData({
                    latitude : '',
                    longitude : '',
                    positionFlag: 0
                  })
                  // 授权失败
                  _this.getLocalCaseList(1)
                }
              }
            })
          } else {
            _this.setData({
              latitude : '',
              longitude : '',
              positionFlag: 0,
              isAuthorize: false
            })
            // 授权失败
            _this.getLocalCaseList(1)
          }
        }
      })
    } else {
      _this.setData({
        isRefresh :true
      })
        wx.getLocation({
          type: 'wgs84',
          success (res) {
            _this.setData({
              latitude :res.latitude,
              longitude :res.longitude,
              positionFlag: 0
            })
    
            const latitude = res.latitude
            const longitude = res.longitude
            wx.setStorageSync('latitude', latitude)
            wx.setStorageSync('longitude', longitude)
            _this.Getlocationname(latitude,longitude)

            _this.data.page = 1
            _this.getLocalCaseList(1)
          }
        })
    }
  },
  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {
    this.uploadlocation()
    // this.loadNewData()

    // setTimeout(()=>{
    //   wx.stopPullDownRefresh()
    // },1000)
 },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {
    // console.log('我来了 更多数据......')
    // this.loadMoreData()
    this.data.page = this.data.page + 1
    this.getLocalCaseList(this.data.page, 'more')
  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  },
  // 打开弹窗 禁止滑动
  popupShow(e) {
    wx.setPageStyle({
      style: {
        overflow: 'hidden'
      }
    })
  },
 // 关闭弹窗
  popupClose(e) {
    wx.setPageStyle({
      style: {
        overflow: ''
      }
    })
  }
})